package com.dxf.chepter03

import scala.util.control.Breaks._

/**
 * 函数式编程 基础:
 * 1 函数定义/声明
 * 2 函数运行机制
 * 3 递归 --> 作者推荐使用递归解决问题,是算法基础,邮差问题,背包问题,迷宫问题,回溯,二叉树,散列
 * 4 过程
 * 5 惰性函数和异常
 *
 * 函数式编程 高级:
 * 1 值函数
 * 2 高阶函数
 * 3 闭包
 * 4 应用函数
 * 5 柯里化函数,抽象控制
 *
 *
 * ============================================
 *
 *
 * 方法和函数 几乎可以等同,定义,使用,运行机制都一样的,只是函数的使用方式更加的灵活
 *
 * 函数式编程是从编程方式(范式)的角度来谈的,可以这样理解:
 * 函数式编程把函数当做一等公民,充分利用函数,支持函数的多种使用方式
 *
 * 面向对象编程是以对象为基础的编程方式
 *
 *
 * 在scala中函数编程和面向对象编程融合在一起了
 *
 *
 */
object T32_函数式编程基础 {
  def main(args: Array[String]): Unit = {

    val dog = new Dog
    val sum = dog.sum(1, 2) //方法
    println(sum)


    println("======================================")
    //方法转函数
    var f1 = dog.sum _
    println(f1(1, 2))


    println("======================================")
    //函数定义
    var f2 = (a: Int, b: Int) => {
      a + b
    }
    println(f2(1,2))


  }


}

class Dog {
  def sum(a: Int, b: Int): Int = {
    a + b
  }
}
